package com.wy.thread_safe.phenomenon;

/**
 * 演示线程不安全现象
 **/
public class Main {
    //定义一个共享的数据--静态属性的方式来体现
    static int r=0;
    //定义加减的次数
    static final int COUNT=100_0000;
    //定义两个线程，分别对r进行加法和减法操作
    static class Add extends Thread{
        @Override
        public void run() {
            for (int i = 0; i < COUNT; i++) {
                r++;
            }
        }
    }
    static class Sub extends Thread{
        @Override
        public void run() {
            for (int i = 0; i < COUNT; i++) {
                r--;
            }
        }
    }

    public static void main(String[] args) throws InterruptedException {
        Add add=new Add();
        add.start();
        Sub sub=new Sub();
        sub.start();
        //等待线程结束
        add.join();
        sub.join();
        //理论上，线程结束后，r被加了COUNT次，也被减了COUNT次
        //所以r结果应该是0，但是实际结果不一定，这就是线程不安全的现象
        System.out.println(r);
    }
}
